﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Generator.Helpers;
using System.Xml.Linq;

namespace Generator.Service
{
    /// <summary>
    /// Cette classe représente le générateur de base d'un VSTemplate
    /// </summary>
    public abstract class VSTemplateGenerator
    {
        #region Private Members

        /// <summary>
        /// Helper pour les fichiers
        /// </summary>
        internal FileHelper fileHelper;

        /// <summary>
        /// Helper pour les élements du fichier VSTemplate
        /// </summary>
        internal VSTemplateHelper vsTemplateHelper;

        /// <summary>
        /// Helper permettant le remplacement de text dans un fichier texte
        /// </summary>
        internal TextReplaceHelper textReplaceHelper;

        #endregion

        #region SourceFolder Property

        /// <summary>
        /// Répertoire de a parser
        /// </summary>
        public string SourceFolder { get; protected set; }

        #endregion

        #region OutputFolder Property

        /// <summary>
        /// Répertoire de sortie
        /// </summary>
        public string OutputFolder { get; protected set; }

        #endregion

        #region Content Property

        /// <summary>
        /// Contenu XML du VSTemplate
        /// </summary>
        public XDocument Content { get; protected set; }

        #endregion

        #region Constructor

        /// <summary>
        /// Constructeur par défaut
        /// </summary>
        protected VSTemplateGenerator()
        {
            this.fileHelper = new FileHelper();
            this.vsTemplateHelper = new VSTemplateHelper();
            this.textReplaceHelper = new TextReplaceHelper();
        }

        #endregion

        #region Abstract Execute Method

        /// <summary>
        /// Cette méthode permet de générer le template VS dans le répertoire Output
        /// </summary>
        /// <param name="folder">Répertoire Source pour créer le VSTemplate</param>
        /// <param name="outputFolder">sorite du fichier</param>
        public abstract void Execute(string folder, string outputFolder); 

        #endregion
    }
}
